package wx.wechat.service.pay; import com.alibaba.fastjson.JSONObject; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import lombok.SneakyThrows; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import wx.wechat.service.WXService; import java.util.HashMap; import java.util.Map; /** * Created by apple on 16/6/12. */ /** * @function 用于在购买商品之后进行回调 */ public class PayedOrderService extends WXService { /** * @param xml * @return * @function 解析获取到的XML信息 * @Test "<xml><appid><![CDATA[wx7d0444df2763bf91]]></appid>\n" + * "<bank_type><![CDATA[ICBC_DEBIT]]></bank_type>\n" + * "<cash_fee><![CDATA[1]]></cash_fee>\n" + * "<device_info><![CDATA[WEB]]></device_info>\n" + * "<fee_type><![CDATA[CNY]]></fee_type>\n" + * "<is_subscribe><![CDATA[Y]]></is_subscribe>\n" + * "<mch_id><![CDATA[1243378802]]></mch_id>\n" + * "<nonce_str><![CDATA[0gfe5twrncdh9bvjs5yq]]></nonce_str>\n" + * "<openid><![CDATA[ormKXjjvAcg8Dpo_TjKVzrmUFTD8]]></openid>\n" + * "<out_trade_no><![CDATA[DB20160612155510337]]></out_trade_no>\n" + * "<result_code><![CDATA[SUCCESS]]></result_code>\n" + * "<return_code><![CDATA[SUCCESS]]></return_code>\n" + * "<sign><![CDATA[4CEA670F1D2865C95BB9F86FBBAAA7ED]]></sign>\n" + * "<time_end><![CDATA[20160612155515]]></time_end>\n" + * "<total_fee>1</total_fee>\n" + * "<trade_type><![CDATA[JSAPI]]></trade_type>\n" + * "<transaction_id><![CDATA[4009292001201606127153809026]]></transaction_id>\n" + * "</xml>\n"; */ @SneakyThrows public Map<String, String> parseNotifyXML(String xml) { Map<String, String> result = new HashMap<>(); Document document = DocumentHelper.parseText(xml); Element root = document.getRootElement(); //获取系统内订单编号,这里系统内的订单ID是放在attach内传入 result.put("attach", root.element("attach").getText()); //获取微信的订单编号 result.put("TransactionId", root.element("transaction_id").getText()); return result; } /** * @param OrderId * @param TradeChannel * @param TradeType * @param TransactionId * @function 更新系统内的订单状态 */ // @SneakyThrows public Map<String, Object> updateOrderState(String OrderId, String TradeChannel, String TradeType, String TransactionId) { String url = "http://121.40.48.71:8092/api/UpdateOrderState?OrderId=" + OrderId + "&TradeChannel=1&TradeType=1&TransactionId=" + TransactionId; //构建请求 Request request = new Request.Builder() .url(url) .get() .build(); Map<String, Object> result = new HashMap<>(); //发起请求 Response response = new OkHttpClient().newCall(request).execute(); //解析获取的数据并且返回Map JSONObject.parseObject(response.body().string()).forEach((k, v) -> { result.put(k, String.valueOf(v)); }); return result; } }